package pers.sloera.leetcode.editor.cn;//给定一种规律 pattern 和一个字符串 s ，判断 s 是否遵循相同的规律。
//
// 这里的 遵循 指完全匹配，例如， pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。 
//
// 
//
// 示例1: 
//
// 
//输入: pattern = "abba", str = "dog cat cat dog"
//输出: true 
//
// 示例 2: 
//
// 
//输入:pattern = "abba", str = "dog cat cat fish"
//输出: false 
//
// 示例 3: 
//
// 
//输入: pattern = "aaaa", str = "dog cat cat dog"
//输出: false 
//
// 
//
// 提示: 
//
// 
// 1 <= pattern.length <= 300 
// pattern 只包含小写英文字母 
// 1 <= s.length <= 3000 
// s 只包含小写英文字母和 ' ' 
// s 不包含 任何前导或尾随对空格 
// s 中每个单词都被 单个空格 分隔 
// 
// Related Topics 哈希表 字符串 👍 445 👎 0


import java.util.HashMap;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution290 {
    public static void main(String[] args) {
        final Solution290 solution290 = new Solution290();
        System.out.println(solution290.wordPattern("abba", "dog cat cat dog"));
        System.out.println(solution290.wordPattern("abba", "dog cat cat fish"));
        System.out.println(solution290.wordPattern("aaaa", "dog cat cat dog"));
        System.out.println(solution290.wordPattern("abba", "dog dog dog dog"));
        System.out.println(solution290.wordPattern("abba", "dog dog dog dog"));
        System.out.println(solution290.wordPattern("abba", "dog cat cat dog"));
    }

    public boolean wordPattern(String pattern, String s) {
        final String[] words = s.split("\\s+");
        if (words.length != pattern.length()) {
            return false;
        }
        // 存储映射关系
        final HashMap<Character, String> wordMap = new HashMap<>();
        for (int i = 0; i < pattern.length(); i++) {
            final char c = pattern.charAt(i);
            // 判断key是否存在
            if (!wordMap.containsKey(c)) {
                // 当前value 可能已经有映射关系了
                if (wordMap.containsValue(words[i])) {
                    return false;
                }
                wordMap.put(c, words[i]);
            } else {
                if (!words[i].equals(wordMap.get(c))) {
                    return false;
                }
            }
        }
        return true;
    }
}
//leetcode submit region end(Prohibit modification and deletion)
